#ifndef _ESTRUCTURAS_H_
#define _ESTRUCTURAS_H_


#define PORT 1500
#define MAX_CON (10)

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <ctype.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/epoll.h>

#include "commons.h"


/********************************************
* ESTRUCTURAS DEL PROCESO RAID1
********************************************/

typedef struct datosRAID
{
	int PID_RAID;					/* Lo necesito para enviarle se�ales al RAID */
	struct epoll_event ev;			/* eventos sobre los que espero */
	int epfd;						/* EPool File Descriptor */
	int listener; 					/* socket en listen*/
	struct t_list *listadoThreads;	/* TODO pasar esta t_list a t_listThreads !!!! */
	int sfd_EspejarDisco; 			/* Se�al para espejar discos */
	int sfd_ReplicarDatos; 			/* Se�al para replicar la cola del PPD que se cayo */
	struct t_list *QueueMirror; 	/* Queue usado como Buffer para cuando se deba espejar */
	pthread_t UltimoTIDUsadoForRead;/* TID del ultimo Thread al que se le envio el ultimo pedido de Lectura */
	int totalSectores;
} stRaidData;

/* Estructura de Cada Thread */
typedef struct threadPPD
{
	uint32_t	ID_PPD;
	pthread_t 	TID_thread;
	uint32_t 	socketPPD;
	int state;		/* 	-> OPERATIVO = su PPD esta conectado ok
						-> ESPEJANDO_MASTER = actua como maestro para la operacion de espejar discos
						-> ESPEJANDO_SLAVE = es el nuevo que se conecto y tiene q escribir los datos en el PPD*/
	int signal;
	struct t_list *QueueReads;
	struct t_list *QueueWrites;
	
} stThreadPPD;

typedef struct pedido
{
	uint32_t	ID_Pedido; /* VER Si no puede reemplazarse por el  */
	uint32_t 	offset;
	uint8_t 	data[SIZE_SECTOR];
	uint32_t 	ID_PPD;
	uint32_t 	socketFS; /*-> si es 0 es que este pedido lo creo el Thread Maestro para espejar
							-> sino es el socket del FileSystem por donde debo responder el pedido */
							
	uint8_t		state; 	/*	-> READY = todavia este pedido no se envio al PPD
							-> RUNNING = se envio al PPD pero todavia no llego su respuesta */
} stPedido;



#endif /* _ESTRUCTURAS_H_ */
